uni-app IOS App 开发记录
本地开发调试
开发本地开发调试的时候,需要打测试开发证书的自定义基座。
APP 开发测试
在开发一些需要沙箱环境的功能点时,需要申请 Developer Certification(开发证书)
应用内测流程
基础需求:macBook 一台,一个 App Store Connect 开发者账户,在 macBook 上安装应用 TestFlight
在
macBook上安装 TestFlight,登录开发者账户,上传 uniApp 打包后的 IOS 应用包,而后同步至App Store Connect在
App Store Connect上配置 APP 信息,并在对应 APP 内的TestFlight内邀请对应的测试人员,Apple ID 需要为邮箱账户才能邀请(因为需要通过邮箱发送邀请链接,内含邀请码,后面要用)测试人员通过邮件接受邀请,而后在
iPhone上安装TestFlight并于该应用内填写对应邀请码(邀请码在内测邀请邮件内)
接入 IAP 支付
苹果规定应用内支付必须要接入接入 IAP 支付,苹果会抽取 30%的手续费(俗称苹果税)
- 不接入就不能通过审核上架
- 已上线的应用如果发现相关引导第三方支付、接入第三方支付等情况,会进行强制下架
游客登录
苹果规定内购如无必须要跟账户绑定的情况下,就必须要有游客登录模式,只要审核的驳回理由就有相关说明就必须要接入,无法绕开跟避规!!!老老实实实现游客登录吧!
实现方式
建议开放购买页,而后在用户进行购买的时候进行弹窗提示,让用户选择登录方式
- 基础示例(基于 uview ui库)
<template>
<view>
<u-button @click="submit()">
购买
</u-button>
<view class="loginModal_wrap">
<u-modal
:show="loginModalShow && !userInfo"
title="登录方式选择"
confirmText="暂不购买"
@confirm="loginModalShow = false"
>
<view style="flex: 1">
<u-button @click="loginJump()">
<view>
<view style="display: flex;">
<view>
登录XXX账户开通
</view>
<u-tag text="推荐" shape="circle" color="#fff" />
</view>
<view> (可在 <text>不同设备</text> 享受会员权益) </view>
</view>
</u-button>
<u-button @click="loginJump(true)">
<view>
游客账户开通
<view> (可在 <text>当前设备</text> 享受会员权益) </view>
</view>
</u-button>
</view>
</u-modal>
</view>
</view>
</template>
<script>
/**
* app 开发,苹果设备判断
* @returns
*/
const isIOS = () => {
// #ifdef APP-PLUS
return uni.getSystemInfoSync().osName === 'ios';
// #endif
// #ifndef APP-PLUS
return false;
// #endif
}
export default {
data() {
return {
loginModalShow: false
userInfo: '' // 用户登录信息
};
},
methods: {
submit() {
// 未登录
if (!this.userInfo) {
// 苹果端显示登陆方式选择
if (isIOS()) {
this.loginModalShow = true;
} else {
// 其他端跳转登录
}
// 登录后业务逻辑
}
},
loginJump(type = false) {
if (!type) {
this.loginModalShow = false;
// 跳转登录页
return;
}
// #ifdef APP-PLUS
if (this.$myUtils.isIOS()) {
plus.device.getInfo({
success: (e) => {
if (e.uuid) {
// 苹果设备唯一标识 uuid,当前应用内唯一
// getLogin 为你自定义的登录方法
this.getLogin({
uuid: e.uuid
}).then(() => {
uni.showToast({
title: "登录成功",
duration: 2000,
});
this.loginModalShow = false;
});
}
},
fail: () => {
uni.showToast({
title: "登录失败",
duration: 2000,
});
},
});
} else {
this.loginModalShow = false;
}
// #endif
// #ifndef APP-PLUS
this.loginModalShow = false;
// #endif
}
}
}
</script>
苹果接入第三方登录
苹果规定接入第三方登录(如微信、微博等),必须要接入苹果登录,不然不能上架,苹果登录最低支持苹果系统13+
示例
// 获取苹果登录相关信息
const getIosLoginInfo = () => {
return new Promise((resolve, reject) => {
// #ifdef APP-PLUS
uni.login({
provider: 'apple',
success: () => {
uni.getUserInfo({
provider: 'apple',
success: (info) => {
// info.userInfo 包含以下信息
// openId 苹果用户唯一标识符,该值在同一开发者账户下的所有APP下是一样的
// authorizationCode 服务器验证需要使用的参数
// identityToken 服务器验证需要使用的参数,校验用户数据是否真实
// realUserStatus 用于判断当前登录的苹果账号是否是一个真实用户 0:当前平台不支持,忽略该值;1:无法确认;2:用户真实性非常高
// 基本上可以根据 openId、identityToken 就可以进行苹果账户登录操作,如需更多用户信息,请查阅相关文档
resolve(info.userInfo)
},
});
},
fail: (err) => {
reject(err)
},
});
// #endif
// #ifndef APP-PLUS
resolve('')
// #endif
})
}
// 判断是否支持苹果登录
const isIOS13 = () => {
const info = uni.getSystemInfoSync();
return info.osName === 'ios' && info.osVersion >= '13'
}
Identifiers 相关
在苹果开发者后台的Identifiers菜单栏内新增功能时,需要重新生成p12、描述文件,进行应用打包
无法创建证书的情况
创建的时候提示 You already have a current Distribution certificate or a pending certificaterequest. 大概率是创建的 Apple Distribution 证书到达上限了,再苹果开发官网可以查到 Maximum number of certificates generated 这个时候就要只新建 iOS Distribution 类型的证书。
Apple Distribution类型的证书存在上限。